#include "head.h"

//设定航班
void add_flight(F_list *flight_list)
{
    D_List_print(flight_list);
    F_data data;
    printf("请输入要增加的航班班次:");
    scanf("%d",&data.id);
    printf("请输入飞机机型:");
    scanf("%s",data.flighttype);
    printf("请输入航班起点站:");
    scanf("%s",data.startcity);
    printf("请输入航班终点站:");
    scanf("%s",data.arrivecity);
    printf("请输入起飞时间:");
    scanf("%02d:%02d",&data.starttime[0],&data.starttime[1]);
    printf("请输入到达时间:");
    scanf("%02d:%02d",&data.arrivetime[0],&data.arrivetime[1]);
    printf("请输入飞行时间:");
    scanf("%s",data.flytime);
    printf("请输入票价:");
    scanf("%d",&data.value);
    printf("请输入额定载客量:");
    scanf("%d",&data.maxNUM);
    printf("请输入剩余座位数量:");
    scanf("%d",&data.leftbuyersa);
    puts("是否起飞y/n:");
    data.whetherfly = ' ';
    while ((data.whetherfly != 'y') && (data.whetherfly != 'n'))
    {
        data.whetherfly = getchar();
    }
    D_List_insert(flight_list,data,1);
}

//删除航班
void remove_flight(F_list *flight_list)
{
    D_List_print(flight_list);
    int id;
    printf("请输入删除的航班:");
    scanf("%d",&id);
    F_node * data = D_List_find_id(flight_list,id);
    if (data == NULL)
    {
        printf("该航班不存在\n");
        return;
    }
    D_List_delete(flight_list,D_List_find_pos(flight_list,id));
    printf("删除成功\n");
}

//修改航班
void set_flight(F_list *flight_list)
{
    if (flight_list == NULL)
    {
        ERRLOG("链表的动态空间为空");
        return ;
    }
    if (flight_list->next == NULL)
    {
        ERRLOG("传入的表内为空");
        return ;
    }
    F_node *ptr = flight_list->next;
    int id;
    int num,a,b;
    char arr[128];
    char flag;
    D_List_print(flight_list);
    printf("请输入要修改的航班班次:");
    scanf("%d",&id);
    ptr = D_List_find_id(flight_list,id);
    printf("1:飞机机型\n");
    printf("2:航班起点站\n");
    printf("3:航班终点站\n");
    printf("4:起飞时间\n");
    printf("5:到达时间\n");
    printf("6:飞行时间\n");
    printf("7:票价\n");
    printf("8:额定载客量\n");
    printf("9:剩余座位数量\n");
    printf("0:是否起飞\n");
    printf("请输入对应的数字进行修改:");
    scanf("%d",&num);
    switch (num)
    {
    case 1:
        printf("请输入新的飞机机型:");
        scanf("%s",arr);
        strcpy(ptr->data.flighttype,arr);
        printf("飞机机型修改成功 新的飞机机型为 %s\n" , arr);
        break;
    case 2:
        printf("请输入新的航班起点站:");
        scanf("%s",arr);
        strcpy(ptr->data.startcity,arr);
        printf("航班起点站修改成功 新的航班起点站为 %s\n" , arr);
        break;
    case 3:
        printf("请输入新的航班终点站:");
        scanf("%s",arr);
        strcpy(ptr->data.arrivecity,arr);
        printf("航班终点站修改成功 新的航班终点站为 %s\n" , arr);
        break;
    case 4:
        printf("请输入新的起飞时间:");
        scanf("%02d:%02d",&a,&b);
        ptr->data.starttime[0] = a;
        ptr->data.starttime[1] = b;
        printf("起飞时间修改成功 新的起飞时间为 %02d:%02d\n" , a,b);
        break;
    case 5:
        printf("请输入新的到达时间:");
        scanf("%02d:%02d",&a,&b);
        ptr->data.arrivetime[0] = a;
        ptr->data.arrivetime[1] = b;
        printf("到达时间修改成功 新的到达时间为 %02d:%02d\n" , a,b);
        break;
    case 6:
        printf("请输入新的飞行时间:");
        scanf("%s",arr);
        strcpy(ptr->data.flytime,arr);
        printf("飞行时间修改成功 新的飞行时间为 %s\n" , arr);
        break;
    case 7:
        printf("请输入新的票价:");
        scanf("%d",&a);
        ptr->data.value = a;
        printf("票价修改成功 新的票价为 %d\n" , a);
        break;
    case 8:
        printf("请输入新的额定载客量:");
        scanf("%d",&a);
        ptr->data.maxNUM = a;
        printf("额定载客量修改成功 新的额定载客量为 %d\n" , a);
        break;
    case 9:
        printf("请输入新的剩余座位数量:");
        scanf("%d",&a);
        ptr->data.leftbuyersa = a;
        printf("剩余座位数量修改成功 新的剩余座位数量为 %d\n" , a);
        break;
    case 0:
        printf("请输入新的起飞状态:");
        getchar();
        flag = getchar();
        ptr->data.whetherfly = flag;
        printf("起飞状态修改成功 新的起飞状态为 %c\n" , flag);
        break;
    default:
        break;
    }
    D_List_file_print(flight_list);
}

//创建新用户
U_data creat_user(FlightSystem Flight_sys)
{
    U_data data;
    // 用户信息合表
    U_list *list = S_List_init();
    list = S_List_merge(list, Flight_sys.ADMIN_USER);    // 管理员账户信息文件
    list = S_List_merge(list, Flight_sys.REGULAR_USER);  // 普通用户信息文件
    list = S_List_merge(list, Flight_sys.SILVER_USER);   // 银卡会员信息文件 (9折)
    list = S_List_merge(list, Flight_sys.GOLD_USER);     // 金卡会员信息文件 (8折)
    list = S_List_merge(list, Flight_sys.PLATINUM_USER); // 白金会员信息文件 (7折)

    printf("请输入修改的信息");
    printf("用户名:");
    scanf("%s",data.name);
    while(S_List_find_name(list, data.name)!= NULL)
    {
        printf("用户名重复,请重新输入用户名:\n");
        scanf("%s",data.name);
    }
    printf("密码:");
    scanf("%s",data.passwd);
    printf("身份码:");
    scanf("%d",&data.grade);
    printf("余额:");
    scanf("%d",&data.value);
    printf("修改成功\n");
    press_enter_to_con();
    return data;
}

//修改普通用户
void set_user(FlightSystem Flight_sys)
{
    // 用户信息合表
    U_list *list = S_List_init();
    list = S_List_merge(list, Flight_sys.ADMIN_USER);    // 管理员账户信息文件
    list = S_List_merge(list, Flight_sys.REGULAR_USER);  // 普通用户信息文件
    list = S_List_merge(list, Flight_sys.SILVER_USER);   // 银卡会员信息文件 (9折)
    list = S_List_merge(list, Flight_sys.GOLD_USER);     // 金卡会员信息文件 (8折)
    list = S_List_merge(list, Flight_sys.PLATINUM_USER); // 白金会员信息文件 (7折)
    S_List_print(list);
    
    U_node *ptr ;
    
    char name[128];
    printf("请输入您要修改的用户账号:");
    scanf("%s",name);

    while((ptr =S_List_find_name(list, name))== NULL)
    {
        printf("无此用户,请重新输入用户名:\n");
        scanf("%s",name);
    }
    U_data data = ptr->data;
    U_list *temp_list = by_data_list(Flight_sys,data);//判断当前用户链表
    if(ptr != NULL)
    {
        printf("查找到以下用户信息\n");
        printf("用户名:%s\t密码:%s\t身份码:%d\t余额:%d\n",
                ptr->data.name, ptr->data.passwd, ptr->data.grade, ptr->data.value);
        int pos =by_name_to_pos(temp_list,name);//确定删除位置
        S_List_delete(temp_list,pos);//删除
        U_data data= creat_user(Flight_sys);//创建一个新的用户
        U_list * temp_list = by_data_list(Flight_sys,data);//判断新用户的链表
        S_List_insert(temp_list,data,pos);//插入到对应的链表上面
    }
}

//增加超级用户
void add_root(FlightSystem Flight_sys)
{
    U_data data;
    // 用户信息合表
    U_list *list = S_List_init();
    list = S_List_merge(list, Flight_sys.ADMIN_USER);    // 管理员账户信息文件
    list = S_List_merge(list, Flight_sys.REGULAR_USER);  // 普通用户信息文件
    list = S_List_merge(list, Flight_sys.SILVER_USER);   // 银卡会员信息文件 (9折)
    list = S_List_merge(list, Flight_sys.GOLD_USER);     // 金卡会员信息文件 (8折)
    list = S_List_merge(list, Flight_sys.PLATINUM_USER); // 白金会员信息文件 (7折)
    S_List_print(Flight_sys.ADMIN_USER);
    printf("请输入添加的信息");
    printf("用户名:");
    scanf("%s",data.name);
    while(S_List_find_name(list, data.name)!= NULL)
    {
        printf("用户名重复,请重新输入用户名:\n");
        scanf("%s",data.name);
    }
    printf("密码:");
    scanf("%s",data.passwd);
    data.grade = 1;
    printf("余额:");
    scanf("%d",&data.value);
    printf("添加成功\n");
    //press_enter_to_con();
    S_List_insert(Flight_sys.ADMIN_USER,data,1);
    S_List_File_print(list,Flight_sys.ADMIN_USER);
}